﻿using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;

namespace Acaweb.Servicios.Contracts
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ICursosService" in both code and config file together.
    [ServiceContract]
    public interface ICursosService
    {

        /// <summary>
        /// Retorna la información de un unico curso
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        [WebInvoke(Method = "POST", UriTemplate = "GetById", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        Cursos GetById(CursoPk Id);

        /// <summary>
        /// Provee todos los cursos abiertos en un periodo académico
        /// </summary>
        /// <param name="PeriodoAcademico"></param>
        /// <returns></returns>
        [WebInvoke(Method = "POST", UriTemplate = "GetByPeriodoAcademico", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> GetByPeriodoAcademico(PeriodoAcademico PeriodoAcademico);

        /// <summary>
        /// Provee todos los cursos abiertos en un periodo académico y un plan de estudios
        /// </summary>
        /// <param name="PeriodoAcademico"></param>
        /// <param name="CodigoPlan">Codigo único interno de un plan de estudio</param>
        /// <returns></returns>
        [WebInvoke(Method = "POST", UriTemplate = "GetByPeriodoAcademicoAndPlanEstudio", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> GetByPeriodoAcademicoAndPlanEstudio(PeriodoAcademico PeriodoAcademico, int CodigoPlan);

        /// <summary>
        /// Provee todos los cursos abiertos en un periodo académico
        /// </summary>
        /// <param name="CodigoEstudiante">Codigo con el que el Estudiante es identificado en la institución</param>
        /// <param name="PeriodoAcademico">Codigo único interno de un plan de estudio</param>
        /// <returns></returns>
        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "GetByEstudianteAndPeriodoAcademico", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> GetByEstudianteAndPeriodoAcademico(PeriodoAcademico PeriodoAcademico);

        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "GetByMateria", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> GetByMateria(int Materia);

        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Docente })]
        [WebInvoke(Method = "POST", UriTemplate = "GetByDocente", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> GetByDocente(string Nit);

        [Acaweb.Servicios.Utility.AmbitoRealizacion(new Acaweb.Servicios.Utility.Ambitos[] { Acaweb.Servicios.Utility.Ambitos.Estudiante })]
        [WebInvoke(Method = "POST", UriTemplate = "CargarPrematricula", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> CargarPrematricula(PeriodoAcademico PeriodoAcademico);

        [WebInvoke(Method = "POST", UriTemplate = "GetHabilitados", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        List<Cursos> GetHabilitados(PeriodoAcademico Periodo);

        [WebInvoke(Method = "POST", UriTemplate = "GetCreditosPagados", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        int GetCreditosPagados(PeriodoAcademico Periodo);
    }
}